package com.ruoyi.network.service;

import com.ruoyi.common.core.page.TableDataInfo;
import com.ruoyi.network.domain.entity.IpAddress;
import com.ruoyi.network.model.vo.IpAddressCountVO;
import com.ruoyi.network.model.vo.IpAddressDetailVO;
import com.ruoyi.network.model.vo.IpAddressPageVO;
import com.ruoyi.network.model.vo.IpAddressRequestVO;
import org.springframework.web.multipart.MultipartFile;

import javax.servlet.http.HttpServletResponse;
import java.util.Collection;
import java.util.List;
import java.util.Map;

/**
 * IP地址维护结构Service接口
 *
 * @author lyp
 * @date 2024-12-13
 */
public interface IIpAddressService {
    /**
     * 查询IP地址维护结构
     *
     * @param id IP地址维护结构主键
     * @return IP地址维护结构
     */
    IpAddress selectIpAddressById(Long id);

    /**
     * 查询IP地址维护结构列表
     *
     * @param vo 分页参数
     * @return IP地址维护结构集合
     */
    TableDataInfo selectIpAddressList(IpAddressPageVO vo);

    /**
     * 新增IP地址维护结构
     *
     * @param vo 参数接收
     * @return 结果
     */
    int insertIpAddress(IpAddressRequestVO vo);

    /**
     * 修改IP地址维护结构
     *
     * @param vo IP地址维护结构
     * @return 结果
     */
    int updateIpAddress(IpAddressRequestVO vo);

    /**
     * 批量删除IP地址维护结构
     *
     * @param ids 需要删除的IP地址维护结构主键集合
     * @return 结果
     */
    int deleteIpAddressByIds(List<Long> ids);

    /**
     * 删除IP地址维护结构信息
     *
     * @param id IP地址维护结构主键
     * @return 结果
     */
    int deleteIpAddressById(Long id);

    /**
     * 数据导处
     *
     * @param response 响应域
     * @param vo       参数接收
     */
    void export(HttpServletResponse response, IpAddressPageVO vo);

    /**
     * Ip地址统计
     *
     * @param vo 统计参数
     * @return Long 统计结果
     */
    long count(IpAddressCountVO vo);

    /**
     * Ip地址数据导入
     *
     * @param file 待解析数据
     * @return Boolean 导入结果
     */
    Boolean importExcel(MultipartFile file);

    /**
     * 批量插入
     *
     * @param arrayList 待插入数据集
     * @return Boolean 插入结果
     */
    Boolean batchInsertion(List<IpAddress> arrayList);

    /**
     * 通过ip值查询
     *
     * @param values ip值
     * @return Map<Long, IpAddress> 查询结果
     */
    Map<Long, IpAddress> findByIpValue(Collection<Long> values);

    /**
     * 通过rangeId查询详情
     *
     * @param rangeId 网段ID
     * @return List<IpAddressDetailVO> 查询结果
     */
    List<IpAddressDetailVO> getByRangeIdInfo(Long rangeId);
}
